﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using MDK;
using MDK.Physics;
using ZedGraph;

namespace ParticleCollapse
{
    public class ParticleCollapse : GraphicPrimitive
    {
        double v01;
        double m1;
        double m2;

       #region Интерфейсные методы
        public ParticleCollapse() : base(0, 0, new Size())
        {
            this.Needs = ExpirementNeeds.Normal;
            AddParametersToTemplate();
        }

        public override ExpirementAbout GetAbout()
        {
            return new ExpirementAbout("ParticleCollapse", "Столкновение двух частиц",
                "Столкновение двух частиц массами m1 и m2 и скорость первой в инерциальной системе отсчёта v01");
        }
        public ParticleCollapse(int Left, int Top, Size Size)
            : base(Left, Top, Size)
        {
            this.Needs = ExpirementNeeds.Normal; // нужды

            // передаём размеры
            this.Left = Left; 
            this.Top = Top;

            this.Size = Size;

            //создаём список по умолчанию
            AddParametersToTemplate();
        }

        
        private void AddParametersToTemplate()
        {
            ParameterListTemplate = new ParameterList();

            ParameterListTemplate.Add("Скорость первой частицы", "v01", 10);
            ParameterListTemplate.Add("Масса первой частицы", "m1", 20);
            ParameterListTemplate.Add("Масса второй частицы", "m2", 30);
        }

        public override void SetParameters(ParameterList pList)
        {
            this.v01 = pList["v01"];
            
            this.m1 =  pList["m1"];
            this.m2 =  pList["m2"];
        }

        
        public override ParameterList  GetParameters()
        {
            ParameterList RetList = ParameterListTemplate;

            RetList["v01"] = this.v01;
            
            RetList["m1"]  = this.m1;
            RetList["m2"]  = this.m2;
            
            return RetList;
        }

        public override PointPairList GetResults()
        {
           // todo: возвращаем результаты для статистики
            return new PointPairList();
        }
        #endregion
        /// <summary>
        /// Метод рисования
        /// </summary>
        /// <param name="e"></param>
        public override void Draw(System.Windows.Forms.PaintEventArgs e)
        {
            Collide collider = new Collide(v01, m1, m2);

            double m = m1*m2 / (m1 + m2);

            e.Graphics.DrawEllipse(Pens.Red, 50, 50, (int)(2 * v01), (int)(2 * v01));
            Point O = new Point(50 + (int)(2 * v01), 50 + (int)(2 * v01));
            Point A = new Point(50 + (int)(2 * v01 - collider.V), 50 + (int)(2 * v01));

            e.Graphics.DrawLine(Pens.Blue, A, O);

            string Info = "V: " + collider.V +
                        "\nm1: " + collider.m1 +
                        "\nm2: " + collider.m2;
            
            
            
            e.Graphics.DrawString(Info, new Font("Trebuchet", 12f), Brushes.Black, new Point(100, 100));
        }

    }
}
